Codage binaire des entiers relatifs

 

Nous allons étudier la représentation des entiers signés sur un octet (mais le nombre de bits pourra être inférieur ou supérieur en fonction de la grandeur des nombres à coder, mais il faudra systématiquement indiquer sur combien de bits se fait le codage).

1) Un premier codage « naïf »

Un bit sur les 8 bits disponibles sera utilisé pour coder le signe. C’est le bit de gauche (dit de fort poids) qui est utilisé :

S’il vaut 1 alors le nombre codé est négatif

S’il vaut 0 alors le nombre codé est positif

 

Code du signe

Codage de la valeur absolue

 

1

x

x

x

x

x

x

x

négatif

0

x

x

x

x

x

x

x

positif

Octet

 

 

On code donc le signe 0/1 puis sur les 7 bits suivants la valeur absolue qui va donc de 0 à 27-1 (=127)

On peut donc coder ainsi de –127 à + 127 sur un octet signé.

 

Exemples : 35=00100011    et   -35=10100011  codés sur un octet.

 

Inconvénients de ce codage :

                                     et -0   s’écrit 1000 0000

En effet : 1 + (-3) s’écrit, si l’on pose l’opération d’addition binaire classique:

                           0000 0001

                     +    1000 0011

         ---------------------------

                       =  1000 0100

ce qui serait le codage de –4 or 1+(-3) = -2 ….le résultat est donc faux

 

2) Codage par « complément à 2 » : qui permet d’utiliser l’additionneur classique.

a) Introduction

Notre problème consiste à coder les opposés des entiers positifs, or si n est un entier naturel, son opposé est le nombre tel que leur somme soit nulle.

Ainsi sur un octet, l’opposé de  0001 0110 doit être un nombre codé sur un octet xxxx xxxx tel que    0001 0110 + xxxx xxxx= 0000 0000    réalisons l’« opération à trous» ou la soustraction.

Ainsi 0001 0110 + 1110 1010= 10000 0000   il y a débordement de l’octet, mais le codage obtenu répond à nos attentes.Rem

0001 0110 + 1110 1010= 10000 0000  ce 1 sera ignoré.

De façon générale sur 1 octet, on cherchera l’opposé d’un entier naturel n   en posant

 n+(-n)=28  ou encore -n=28-n

Ainsi en binaire, le codage de –n sera   le codage de 28-n. Or 28-n=28-1-n+1 c'est-à-dire 11111111-n+1 en binaire or on remarque qu’effectuer 11111111-n revient à « inverser » chaque bit ainsi l’opposé de n s’obtiendra en inversant les bits de n puis en ajoutant 1.d'un entier négatif en binaire avec

 

b) Cas général deux sur N bits)

Soit N le nombre de bits utilisés pour coder le nombre entier relatif n.

Si n > 0 est (en base décimale) un entier inférieur ou égal à (c'est-à-dire tel qu'on puisse l'écrire en binaire en complément à 2 sur N bits, dont celui « le plus à gauche » est donc 0), alors la

représentation en binaire en complément à 2 du nombre -n est, par définition, la représentation en binaire sur N bits du nombre (en base décimale) . C'est pour cela qu'on parle de « complément à 2 », qui est une façon abrégée de parler du « complément à 2N » du nombre n.

 

A

c) Dans la pratique

Algorithme de conversion en complément à 2

 

  • Convertir la valeur absolue du nombre (c'est-à-dire le nombre privé de son signe)
  • Formater l’écriture binaire sur le nombre de bits choisi

 

  • Inverser chaque bit (remplacer les 0 par des 1 et les 1 par des 0)
  • Additionner 1 pour obtenir le codage du nombre en CA2

Exemple : codage de -58 en complément à 2 sur un octet

  • 58=111010

 

  • 00111010  placement de deux zéros devant pour occuper l’octet complet.

 

  •  11000101

             +            1

  • =11000110 codage en complément à 2 de -58 (cf remarque)

Remarque 1: grâce aux nombres négatifs codés en complément à 2, soustraire reviendra bien à effectuer une addition par l’opposé codé en CA2.

 

Remarque 2: pour trouver la valeur absolue en base 10 d’un codage CA2, il suffit d’appliquer les deux dernières étapes de l’algorithme.

Exemple :   

        110001100CA2  correspond à un nombre négatif

Inversion :   00111001

+                                1

=                  001110102    sa valeur absolue vaut 58            donc 110001100CA2= -5810

 

Exercice

1)      Coder en binaire sur 10bits : 10810, -10810  et 4510 et -4510 , les négatifs seront codés en CA2 sur un octet.

45= 00 0010 11012             108= 00 011011002

-45=11 11010011CA2             -108=11 10010100 CA2

2)      Effectuer en binaire  les trois opérations suivantes : 108+45 ;   108-45  puis  45-108

108+45

108-45

45-108

 00 0010 1101

+00 0110 1100

--------------

=00 1001 1001

Vérification : 153

 

   00 0110 1100

+ 11 1101 0011

 = 1 00 0011 1111

Ignorer le débordement

Vérification : 63

 

  00 0010 1101

+11 1001 0100

=11 1100 0001CA2

Vérification : -63

 

 

Bilan addition signée

Lors des additions signées, des débordements peuvent survenir.  Dans ces cas, on néglige toujours le bit supplémentaire pour déterminer le résultat final.

 

Interprétation du résultat final

 Son signe est celui indiqué par le  bit de poids fort

Si 0 : résultat est un nombre positif

Si 1 : nombre négatif

Le résultat est directement codé en complément à 2

Sa valeur absolue est trouvée par le calcul du complément à 2